home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src / scissor.s < prev    next >
Text File  |  1999-02-04  |  4KB  |  244 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src/scissor.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _gl_error
  7.     XREF    _CC
  8.  
  9.     SECTION "_gl_Scissor:0",CODE
  10.  
  11.  
  12. ;void gl_Scissor( GLcontext *ctx,
  13.     XDEF    _gl_Scissor
  14. _gl_Scissor
  15.     movem.l    d2-d4,-(a7)
  16.     move.l    $20(a7),d0
  17.     move.l    $1C(a7),d1
  18.     move.l    $18(a7),d3
  19.     move.l    $14(a7),d4
  20.     move.l    $10(a7),a0
  21. L17
  22. ;   if (width<0 || height<0) 
  23.     tst.l    d1
  24.     bmi.b    L19
  25. L18
  26.     tst.l    d0
  27.     bpl.b    L20
  28. L19
  29. ;      gl_error( ctx, GL_INVALID_VALUE, "glScissor" );
  30.     move.l    #L15,-(a7)
  31.     pea    $501.w
  32.     move.l    a0,-(a7)
  33.     jsr    _gl_error
  34.     add.w    #$C,a7
  35.     movem.l    (a7)+,d2-d4
  36.     rts
  37. L20
  38. ;   if (INSIDE_BEGIN_END(ctx)) 
  39.     move.l    a0,a1
  40.     add.l    #$E968,a1
  41.     move.l    (a1),d2
  42.     cmp.l    #$1A00,d2
  43.     beq.b    L22
  44. L21
  45. ;      gl_error( ctx, GL_INVALID_OPERATION, "glBegin" );
  46.     move.l    #L16,-(a7)
  47.     pea    $502.w
  48.     move.l    a0,-(a7)
  49.     jsr    _gl_error
  50.     add.w    #$C,a7
  51.     movem.l    (a7)+,d2-d4
  52.     rts
  53. L22
  54. ;   if (x!=ctx->Scissor.X || y!=ctx->Scissor.Y || 
  55.     move.l    a0,a1
  56.     add.l    #$DE92,a1
  57.     cmp.l    2(a1),d4
  58.     bne.b    L26
  59. L23
  60.     move.l    a0,a1
  61.     add.l    #$DE92,a1
  62.     cmp.l    6(a1),d3
  63.     bne.b    L26
  64. L24
  65.     move.l    a0,a1
  66.     add.l    #$DE92,a1
  67.     cmp.l    $A(a1),d1
  68.     bne.b    L26
  69. L25
  70.     move.l    a0,a1
  71.     add.l    #$DE92,a1
  72.     cmp.l    $E(a1),d0
  73.     beq.b    L27
  74. L26
  75. ;      ctx->Scissor.X = x;
  76.     move.l    a0,a1
  77.     add.l    #$DE94,a1
  78.     move.l    d4,(a1)
  79. ;      ctx->Scissor.Y = y;
  80.     move.l    a0,a1
  81.     add.l    #$DE98,a1
  82.     move.l    d3,(a1)
  83. ;      ctx->Scissor.Width = width;
  84.     move.l    a0,a1
  85.     add.l    #$DE9C,a1
  86.     move.l    d1,(a1)
  87. ;      ctx->Scissor.Height = height;
  88.     move.l    a0,a1
  89.     add.l    #$DEA0,a1
  90.     move.l    d0,(a1)
  91. ;      ctx->NewState |= NEW_ALL;
  92.     move.l    a0,a1
  93.     add.l    #$E960,a1
  94.     move.l    (a1),d0
  95.     or.l    #$FF,d0
  96.     add.l    #$E960,a0
  97.     move.l    d0,(a0)
  98. L27
  99.     movem.l    (a7)+,d2-d4
  100.     rts
  101.  
  102. L16
  103.     dc.b    'glBegin',0
  104. L15
  105.     dc.b    'glScissor',0
  106.  
  107.     SECTION "_gl_scissor_span:0",CODE
  108.  
  109.     rts
  110.  
  111. ;GLint gl_scissor_span( GLcontext *ctx,
  112.     XDEF    _gl_scissor_span
  113. _gl_scissor_span
  114.     movem.l    d2-d6/a2,-(a7)
  115.     movem.l    $24(a7),d1/d2/a1
  116.     move.l    $20(a7),d5
  117.     move.l    $1C(a7),a0
  118. L28
  119. ;   if (y<ctx->Buffer->Ymin || y>ctx->Buffer->Ymax
  120.     move.l    $8FC(a0),a2
  121.     cmp.l    $2C(a2),d2
  122.     blt.b    L32
  123. L29
  124.     move.l    $8FC(a0),a2
  125.     cmp.l    $30(a2),d2
  126.     bgt.b    L32
  127. L30
  128.     move.l    $8FC(a0),a2
  129.     cmp.l    $28(a2),d1
  130.     bgt.b    L32
  131. L31
  132.     move.l    d1,d0
  133.     add.l    d5,d0
  134.     subq.l    #1,d0
  135.     move.l    $8FC(a0),a2
  136.     cmp.l    $24(a2),d0
  137.     bge.b    L33
  138. L32
  139.     moveq    #0,d0
  140.     movem.l    (a7)+,d2-d6/a2
  141.     rts
  142. L33
  143. ;      GLint xMin = ctx->Buffer->Xmin;
  144.     move.l    $8FC(a0),a2
  145.     move.l    $24(a2),d4
  146. ;      GLint xMax = ctx->Buffer->Xmax;
  147.     move.l    $8FC(a0),a0
  148.     move.l    $28(a0),d3
  149. ;      for (i=0;
  150.     moveq    #0,d0
  151.     bra.b    L35
  152. L34
  153. ;         mask[i] = 0;
  154.     clr.b    0(a1,d0.l)
  155.     addq.l    #1,d0
  156. L35
  157.     move.l    d1,d2
  158.     add.l    d0,d2
  159.     cmp.l    d4,d2
  160.     blt.b    L34
  161. L36
  162. ;      for (i=(GLint)n-1;
  163.     move.l    d5,d0
  164.     subq.l    #1,d0
  165.     bra.b    L38
  166. L37
  167. ;         mask[i] = 0;
  168.     clr.b    0(a1,d0.l)
  169.     subq.l    #1,d0
  170. L38
  171.     move.l    d1,d2
  172.     add.l    d0,d2
  173.     cmp.l    d3,d2
  174.     bgt.b    L37
  175. L39
  176.     moveq    #1,d0
  177.     movem.l    (a7)+,d2-d6/a2
  178.     rts
  179.  
  180.     SECTION "_gl_scissor_pixels:0",CODE
  181.  
  182.  
  183. ;GLuint gl_scissor_pixels( GLcontext *ctx,
  184.     XDEF    _gl_scissor_pixels
  185. _gl_scissor_pixels
  186. L44    EQU    -$14
  187.     link    a5,#L44
  188.     movem.l    d2-d7/a2-a4,-(a7)
  189.     move.l    $8(a5),a0
  190.     move.l    $14(a5),a1
  191.     move.l    $10(a5),a2
  192.     move.l    $18(a5),a4
  193. L40
  194. ;   GLint xmin = ctx->Buffer->Xmin;
  195.     move.l    $8FC(a0),a3
  196.     move.l    $24(a3),d7
  197. ;   GLint xmax = ctx->Buffer->Xmax;
  198.     move.l    $8FC(a0),a3
  199.     move.l    $28(a3),d5
  200. ;   GLint ymin = ctx->Buffer->Ymin;
  201.     move.l    $8FC(a0),a3
  202.     move.l    $2C(a3),d4
  203. ;   GLint ymax = ctx->Buffer->Ymax;
  204.     move.l    $8FC(a0),a0
  205.     move.l    $30(a0),d3
  206. ;   for (i=0;
  207.     moveq    #0,d1
  208.     bra.b    L42
  209. L41
  210. ;      mask[i] &= (x[i]>=xmin) & (x[i]<=xmax) & (y[i]>=ymin) & 
  211.     move.l    0(a2,d1.l*4),d0
  212.     cmp.l    d7,d0
  213.     sge    d0
  214.     and.l    #1,d0
  215.     move.l    0(a2,d1.l*4),d2
  216.     cmp.l    d5,d2
  217.     sle    d2
  218.     and.l    #1,d2
  219.     and.l    d2,d0
  220.     move.l    0(a1,d1.l*4),d2
  221.     cmp.l    d4,d2
  222.     sge    d2
  223.     and.l    #1,d2
  224.     and.l    d2,d0
  225.     move.l    0(a1,d1.l*4),d2
  226.     cmp.l    d3,d2
  227.     sle    d2
  228.     and.l    #1,d2
  229.     and.l    d2,d0
  230.     move.b    d0,d2
  231.     lea    0(a4,d1.l),a0
  232.     and.b    d2,(a0)
  233.     addq.l    #1,d1
  234. L42
  235.     cmp.l    $C(a5),d1
  236.     blo.b    L41
  237. L43
  238.     moveq    #1,d0
  239.     movem.l    (a7)+,d2-d7/a2-a4
  240.     unlk    a5
  241.     rts
  242.  
  243.     END
  244.